var md5 = (function () {
  function h(a, e, b, c, d, f) {
    a = m(m(e, a), m(c, f));
    return m(a << d | a >>> 32 - d, b)
  }

  function g(a, e, b, c, d, f, g) {
    return h(e & b | ~e & c, a, e, d, f, g)
  }

  function k(a, e, b, c, d, f, g) {
    return h(e & c | b & ~c, a, e, d, f, g)
  }

  function l(a, e, b, c, d, f, g) {
    return h(b ^ (e | ~c), a, e, d, f, g)
  }

  function m(a, e) {
    var b = (a & 65535) + (e & 65535);
    return (a >> 16) + (e >> 16) + (b >> 16) << 16 | b & 65535
  }

  return function (a) {
    for (var e = [], b = 0; b < 8 * a.length; b += 8) e[b >> 5] |= (a.charCodeAt(b / 8) & 255) << b % 32;
    a = 8 * a.length;
    e[a >> 5] |= 128 << a % 32;
    e[(a + 64 >>> 9 << 4) + 14] = a;
    a = 1732584193;
    b = -271733879;
    for (var c = -1732584194, d = 271733878, f = 0; f < e.length; f += 16) {
      var n = a,
        p = b,
        q = c,
        r = d;
      a = g(a, b, c, d, e[f + 0], 7, -680876936);
      d = g(d, a, b, c, e[f + 1], 12, -389564586);
      c = g(c, d, a, b, e[f + 2], 17, 606105819);
      b = g(b, c, d, a, e[f + 3], 22, -1044525330);
      a = g(a, b, c, d, e[f + 4], 7, -176418897);
      d = g(d, a, b, c, e[f + 5], 12, 1200080426);
      c = g(c, d, a, b, e[f + 6], 17, -1473231341);
      b = g(b, c, d, a, e[f + 7], 22, -45705983);
      a = g(a, b, c, d, e[f + 8], 7, 1770035416);
      d = g(d, a, b, c, e[f + 9], 12, -1958414417);
      c = g(c, d, a, b, e[f + 10], 17, -42063);
      b = g(b, c, d, a, e[f + 11], 22, -1990404162);
      a = g(a, b, c, d, e[f + 12], 7, 1804603682);
      d = g(d, a, b, c, e[f + 13], 12, -40341101);
      c = g(c, d, a, b, e[f + 14], 17, -1502002290);
      b = g(b, c, d, a, e[f + 15], 22, 1236535329);
      a = k(a, b, c, d, e[f + 1], 5, -165796510);
      d = k(d, a, b, c, e[f + 6], 9, -1069501632);
      c = k(c, d, a, b, e[f + 11], 14, 643717713);
      b = k(b, c, d, a, e[f + 0], 20, -373897302);
      a = k(a, b, c, d, e[f + 5], 5, -701558691);
      d = k(d, a, b, c, e[f + 10], 9, 38016083);
      c = k(c, d, a, b, e[f + 15], 14, -660478335);
      b = k(b, c, d, a, e[f + 4], 20, -405537848);
      a = k(a, b, c, d, e[f + 9], 5, 568446438);
      d = k(d, a, b, c, e[f + 14], 9, -1019803690);
      c = k(c, d, a, b, e[f + 3], 14, -187363961);
      b = k(b, c, d, a, e[f + 8], 20, 1163531501);
      a = k(a, b, c, d, e[f + 13], 5, -1444681467);
      d = k(d, a, b, c, e[f + 2], 9, -51403784);
      c = k(c, d, a, b, e[f + 7], 14, 1735328473);
      b = k(b, c, d, a, e[f + 12], 20, -1926607734);
      a = h(b ^ c ^ d, a, b, e[f + 5], 4, -378558);
      d = h(a ^ b ^ c, d, a, e[f + 8], 11, -2022574463);
      c = h(d ^ a ^ b, c, d, e[f + 11], 16, 1839030562);
      b = h(c ^ d ^ a, b, c, e[f + 14], 23, -35309556);
      a = h(b ^ c ^ d, a, b, e[f + 1], 4, -1530992060);
      d = h(a ^ b ^ c, d, a, e[f + 4], 11, 1272893353);
      c = h(d ^ a ^ b, c, d, e[f + 7], 16, -155497632);
      b = h(c ^ d ^ a, b, c, e[f + 10], 23, -1094730640);
      a = h(b ^ c ^ d, a, b, e[f + 13], 4, 681279174);
      d = h(a ^ b ^ c, d, a, e[f + 0], 11, -358537222);
      c = h(d ^ a ^ b, c, d, e[f + 3], 16, -722521979);
      b = h(c ^ d ^ a, b, c, e[f + 6], 23, 76029189);
      a = h(b ^ c ^ d, a, b, e[f + 9], 4, -640364487);
      d = h(a ^ b ^ c, d, a, e[f + 12], 11, -421815835);
      c = h(d ^ a ^ b, c, d, e[f + 15], 16, 530742520);
      b = h(c ^ d ^ a, b, c, e[f + 2], 23, -995338651);
      a = l(a, b, c, d, e[f + 0], 6, -198630844);
      d = l(d, a, b, c, e[f + 7], 10, 1126891415);
      c = l(c, d, a, b, e[f + 14], 15, -1416354905);
      b = l(b, c, d, a, e[f + 5], 21, -57434055);
      a = l(a, b, c, d, e[f + 12], 6, 1700485571);
      d = l(d, a, b, c, e[f + 3], 10, -1894986606);
      c = l(c, d, a, b, e[f + 10], 15, -1051523);
      b = l(b, c, d, a, e[f + 1], 21, -2054922799);
      a = l(a, b, c, d, e[f + 8], 6, 1873313359);
      d = l(d, a, b, c, e[f + 15], 10, -30611744);
      c = l(c, d, a, b, e[f + 6], 15, -1560198380);
      b = l(b, c, d, a, e[f + 13], 21, 1309151649);
      a = l(a, b, c, d, e[f + 4], 6, -145523070);
      d = l(d, a, b, c, e[f + 11], 10, -1120210379);
      c = l(c, d, a, b, e[f + 2], 15, 718787259);
      b = l(b, c, d, a, e[f + 9], 21, -343485551);
      a = m(a, n);
      b = m(b, p);
      c = m(c, q);
      d = m(d, r)
    }
    e = [a, b, c, d];
    a = "";
    for (b = 0; b < 4 * e.length; b++) a += "0123456789abcdef".charAt(e[b >> 2] >> b % 4 * 8 + 4 & 15) + "0123456789abcdef".charAt(e[b >> 2] >> b % 4 * 8 & 15);
    return a
  }
})();